﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FM.Common;
using FM.Events;
using FM.Services;
using FM.接口;
using Microsoft.Practices.Prism.PubSubEvents;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.Unity;

namespace FM.录音.Services
{
    public class 任务监测 : 启动基类
    {
        public 任务监测(IUnityContainer 人事部cs, IEventAggregator 新闻部cs, IRegionManager 模块cs)
            : base(人事部cs, 新闻部cs, 模块cs)
        {
            任务列表 = new List<I定时任务>();
        }

        public List<I定时任务> 任务列表 { get; private set; }
        private I定时器 倒计时监测timer;
        private I定时器 执行监测timer;
        private I定时器 发布监测timer;

        public override void 启动()
        {
            base.启动();

            倒计时监测timer = new 定时器1() {间隔 = new TimeSpan(0, 0, 1)};
            倒计时监测timer.事件 += 倒计时监测timer_事件;
            倒计时监测timer.Is启动 = true;

            执行监测timer = new 定时器1() {间隔 = new TimeSpan(0, 0, 1)};
            执行监测timer.事件 += 执行监测timer_事件;
            执行监测timer.Is启动 = true;


            发布监测timer = new 定时器1() {间隔 = new TimeSpan(0, 0, 1)};
            发布监测timer.事件 += 发布监测timer_事件;
            发布监测timer.Is启动 = true;
        }

        private void 发布监测timer_事件(object sender, EventArgs e)
        {
            var find = from cs in 任务列表
                where !cs.Is已公告
                    && cs.启动时间 < DateTime.Now
                select cs;

            foreach (var x in find)
            {
                x.Is已公告 = true;
                新闻部.GetEvent<状态栏更新Event>().Publish(new 状态栏Data1(Enum状态栏.提示, x.名称 + " 公告"));
            }
        }

        private void 执行监测timer_事件(object sender, EventArgs e)
        {
            var find = from cs in 任务列表
                where cs.Is倒计时
                      && !cs.Is已执行
                      && cs.启动时间 < DateTime.Now
                select cs;

            foreach (var x in find)
            {
                x.Is已执行 = true;
                x.命令.Execute(null);
            }
        }

        private void 倒计时监测timer_事件(object sender, EventArgs e)
        {
            var find = from cs in 任务列表
                where !cs.Is倒计时
                      && cs.启动时间 - DateTime.Now < TimeSpan.FromSeconds(30)
                select cs;

            foreach (var x in find)
            {
                x.Is倒计时 = true;
            }
        }
    }
}